macos: freeze updates until surface is mapped
authorChristian Hergert <chergert@redhat.com>
Wed, 2 Dec 2020 21:10:23 +0000 (13:10 -0800)
committerChristian Hergert <chergert@redhat.com>
Thu, 3 Dec 2020 03:44:01 +0000 (19:44 -0800)
This more closely matches the X11 backend in terms of freezing
updates on the surface initially until we get mapped.

gdk/macos/gdkmacossurface.c

index 5d6f2e1aaa4574011801377ef99371619018e9b2..7c1c03f44d5c00a2b17ef9b6ec4a3edb7f945b20 100644 (file)
@@ -112,15 +112,21 @@ gdk_macos_surface_hide (GdkSurface *surface)
 {
   GdkMacosSurface *self = (GdkMacosSurface *)surface;
   GdkSeat *seat;
+  gboolean was_mapped;
 
   g_assert (GDK_IS_MACOS_SURFACE (self));
 
+  was_mapped = GDK_SURFACE_IS_MAPPED (GDK_SURFACE (self));
+
   seat = gdk_display_get_default_seat (surface->display);
   gdk_seat_ungrab (seat);
 
   [self->window hide];
 
   _gdk_surface_clear_update_area (surface);
+
+  if (was_mapped)
+    gdk_surface_freeze_updates (GDK_SURFACE (self));
 }
 
 static int
@@ -544,7 +550,10 @@ _gdk_macos_surface_new (GdkMacosDisplay   *display,
     }
 
   if (ret != NULL)
-    _gdk_macos_surface_monitor_changed (ret);
+    {
+      gdk_surface_freeze_updates (GDK_SURFACE (ret));
+      _gdk_macos_surface_monitor_changed (ret);
+    }
 
   g_object_unref (frame_clock);
 
@@ -766,6 +775,7 @@ _gdk_macos_surface_show (GdkMacosSurface *self)
         {
           _gdk_macos_surface_update_position (self);
           gdk_surface_invalidate_rect (GDK_SURFACE (self), NULL);
+          gdk_surface_thaw_updates (GDK_SURFACE (self));
         }
     }